\chapter{Implementaci\'on}
  \section{M\'etricas de C\'odigo}
    Para analizar el c\'odigo est\'aticamente se usaron herramientas como Cloc y CCCC. En esta secci\'on se describen m\'etricas de c\'odigo
    generales obtenidas por ambas herramientas y se analizan los resultados obtenidos.

    \subsection{M\'etricas de \combeng}
    \combeng \ esta constituido por 13 archivos de cabecera con un total de 2072 l\'ineas de texto a la fecha de publicaci\'on de
    este documento. La Tabla \ref{clocCombeng} resume los resultados obtenidos despu\'es de correr \textit{cloc} sobre los archivos fuentes de
    \combeng. 
    \begin{table}[!htf]
      \begin{center}
        \begin{tabular}{|l|r|r|r|r|c|}
          \hline
          \multicolumn{2}{|c|}{Files} & \multicolumn{3}{|c|}{Line Types} \\
          \hline
          \textbf{Type} & \textbf{Count} & \textbf{Blank} & \textbf{Comment} & \textbf{Source} \\
          \hline
          \texttt{C++ header} & 13   &  277  &  841  &  947 \\
          \hline
          \textbf{Total}      & 13   &  277  &  841  &  947 \\
          \hline
        \end{tabular}
        \caption{Resultados de cloc para la capa \combeng}\label{clocCombeng}
      \end{center}
    \end{table}
    Los resultados revelan que \combeng \ no es un proyecto de gran tama\~no. Sin embargo, estas medidas no reflejan su complejidad.

    Dijkstra escribi\'o un ensayo muy interesante\cite{ewd1036} donde reflejaba porqu\'e las empresas no deber\'ian considerar las L\'ineas de
    C\'odigo como una medida exacta de la productividad del software. Medir la ``productividad de un programador'' en t\'erminos del 
    ``n\'umero de l\'ineas de c\'odigo que produce por mes'', fomenta la escritura de c\'odigo ins\'ipido.

    Por otro lado, a mayor n\'umero de l\'ineas de c\'odigo, mayor es la complejidad de un producto de software, pero solo en el sentido de que 
    es m\'as dificultoso de mantener y comprender, no tiene relaci\'on directa con la funcionalidad que \'el provee.

    Continuando con los resultados de Cloc, otro dato interesante es la cantidad de l\'ineas de comentarios en el proyecto y su porcentaje con
    respecto al total de l\'ineas del proyecto:

    $$\frac{\#comment\_lines}{\#comment\_lines + \#code\_lines}$$

    Este valor ronda el 0.45, por lo que hay una cantidad de l\'ineas de comentarios similar a las l\'ineas de c\'odigo.
    Para este porcentaje de l\'ineas de comentarios hay una explicaci\'on, y es que incluso archivos realmente peque\~nos incluyen una
    cabecera (``heading'') definiendo ciertos detalles del archivo, como sus autores, fecha de craci\'on y la licencia por cual se rige.

    Todo componente de software (clases, estructuras, funciones, atributos, etc.) conlleva una descripci\'on detallada a ser interpretada por
    \textit{doxygen} (el cual incluye perfiles de funciones) para la generaci\'on de documentaci\'on autom\'atica. La Tabla \ref{comment} muestra un
    ejemplo de la notaci\'on utilizada para doxygen exhibiendo adem\'as el porqu\'e de las m\'etricas de \combeng \ mencionadas anteriormente.

      \begin{table}[!htb]
        \lstset{language=C++}
        \begin{lstlisting}[frame=single]
          /**
          *  It starts the node execution. 
          *  If the current node has some objects available,
          *  it will combine them and the rest of its behaviour
          *  is defined by both combination and prune policies.
          *  The call method tries to fill the node's children list.
          *
          *  @param children : List of children obtained from the excecution of this node.
          *  @param result   : In case that a node wants to send a result to the server,
          *                    it has to fill this parameter with the desired information.
          *  @param when     : it establishes when the result packet has to be sent to 
          *                    the server.
          */>
          void call(recabs::ChildrenFunctors& children, recabs::Packet& result, recabs::WhenToSend& when)
        \end{lstlisting}
        \centering \caption{Comentario de una funci\'on}\label{comment}
      \end{table}

  \subsection{M\'etricas de la Aplicaci\'on \textbf{RNAFoldingFreeEnergy}}
    Los resultados que se obtuvieron para la aplicaci\'on, implementada como la capa m\'as alta del framework, no distan demasiado de aquellos que se
    obtuvieron para \combeng. La aplicaci\'on \rnaffe \ se compone de 12 archivos en total, con una cantidad de 1759 l\'ineas de texto. La
    tabla \ref{clocRnaFFE} resume los resultados obtenidos despu\'es de correr \textit{cloc} sobre los archivos fuentes de \rnaffe.
    
    \begin{table}[!htf]
      \begin{center}
        \begin{tabular}{|l|r|r|r|r|c|}
          \hline
          \multicolumn{2}{|c|}{Files} & \multicolumn{3}{|c|}{Line Types} \\
          \hline
          \textbf{Type} & \textbf{Count} & \textbf{Blank} & \textbf{Comment} & \textbf{Source} \\
          \hline
          \texttt{C++ Header} & 7  &  158  &   442  &    532 \\
          \hline
          \texttt{C++ Source} & 5  &   84  &   245  &    298 \\
          \hline
          \textbf{Total}      & 12 &  242  &   687   &   830 \\
          \hline
        \end{tabular}
        \caption{Resultados de cloc para la capa de aplicaci\'on \rnaffe}\label{clocRnaFFE}
      \end{center}
    \end{table}

    \subsubsection{Cobertura de C\'odigo para \rnaffe}
      La tabla que se muestra a continuaci\'on exhibe la cobertura de c\'odigo de los archivos m\'as relevantes para la aplicaci\'on. Este test de
      cobertura fue realizado ejecutando a la aplicaci\'on \rnaffe \ con la secuencia de pseudo-nucle\'otidos \emph{H2XB} y con los siguientes
      antivirales: \emph{Didanosine, Abacabir, Emtricitabine, Lamivudine, Stavudine, Zidovudine, Tenofovir, Zidovudine, Nevirapine, Efavirenz, Atazanavir, 
      Darunavir, Fosamprenavir, Indinavir, Lopinavir, Nelfinavir, Saquinavir, Tripanavir}.

      \begin{table}[!htf]
        \begin{center}
          \begin{tabular}{|l|r|r|c|}
            \hline
            & \multicolumn{2}{|c|}{Lines of Code} & Percentage \\
            \hline
            \textbf{File} & \textbf{Total} & \textbf{Executed} &  \hspace{1cm}\textbf{\%} \\
            \hline
            \scriptsize{main\_client.cpp} & 17 & 17 & 100 \\
            \hline 
            \scriptsize{main\_server.cpp} & 40 & 24 & 60 \\
            \hline 
            \scriptsize{rnaffe\_application\_client.cpp} & 23 & 23 & 100 \\
            \hline 
            \scriptsize{rnaffe\_application\_server.cpp} & 53 & 53 & 100 \\
            \hline 
            \scriptsize{rnaffe\_node.cpp} & 81 & 57 & 70.37 \\
            \hline 
            \textbf{Total} & 214 & 174 & 81.30 \\
            \hline 
          \end{tabular}
          \caption{Resultados de cobertura para los archivos principales de \rnaffe} \label{rnaffecov}
        \end{center}
      \end{table}
      
